In order to look for errors in software programs (an activity referred to as “debugging”), some software development tools provide the ability to record the sequence of operations that a processor performed while executing a program. In software programs where multiple procedures are used to perform the functionality required of the software program, one or more of the procedures may consume excessive processor time and slow overall system performance. In order to identify which procedures consume excessive processor time, some software developers use a debugging tool known as a “trace-based profiling.” A trace is captured data regarding values in various processor registers during execution of a traced program, and the addresses of instructions the processor performed while executing the traced program. Trace-based profiling analyzes the trace data to identify how much time the processor spends executing each procedure. The analysis relies on the assumption that each procedure operates at a unique address, and thus the procedure that is being executed can be uniquely identified by that address.
However, some programs use overlays. ‘Overlays’ are sequences of code and/or data bytes that are stored in slower (and thus less expensive) memory and are linked to run at a common address range in faster (and thus more expensive) memory, called an ‘overlay region’. When a program determines that it needs access to the content associated with an overlay, it copies the content into the faster memory so that it aligns with the addresses at which it was linked run. Over time, a plurality of overlay procedures may thus execute from the same series of addresses. With these types of programs it is difficult to determine which of the many procedures that execute from the overlay region consume excessive processor time.